package br.com.pesca.bean;

import br.com.pesca.controller.PescadorController;
import br.com.pesca.entity.Pescador;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

@ViewScoped
@ManagedBean(name = "pescadorBean")
public class PescadorBean extends AbstractBean {

    private Pescador pescador;
    private PescadorController pescadorController;
    private List<Pescador> pescadoresBuscados;
    private String buscaNome;

    public PescadorBean() {
        pescador = new Pescador();
    }

    /**
     * Cria um novo pescador no sistema.
     * 
     * @return String
     */
    public String criarPescador() {
        FacesContext context = FacesContext.getCurrentInstance();
        try {
            getPescadorController().criaPescador(pescador);
            closeDialog();
            context.getExternalContext().getFlash().setKeepMessages(true);
            context.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Sucesso!", "Pescador " + pescador.getNome() + " foi cadastrado com sucesso!"));
            pescador = new Pescador();
            return "/pages/protected/admin/index.xhtml";
        } catch (Exception e) {
            keepDialogOpen();
            mensagemAtencao("Pescador não foi cadastrado. Tente novamente mais tarde.");
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Atualiza/edita um pescador previamente cadastrado no sistema.
     */
    public void atualizarPescador() {
        try {
            getPescadorController().atualizarPescador(pescador);
            closeDialog();
            mensagemSucesso("Pescador " + pescador.getNome() + " foi editado com sucesso!");
            pescador = new Pescador();
        } catch (Exception e) {
            keepDialogOpen();
            mensagemAtencao("Pescador " + pescador.getNome() + " não foi editado. Tente novamente mais tarde.");
            e.printStackTrace();
        }
    }

    /**
     * Busca um pescador previamente cadastrado no sistema pelo seu nome.
     */
    public void buscarPescador() {
        try {
            pescadoresBuscados = getPescadorController().buscaNome(
                    buscaNome);
            if (pescadoresBuscados.isEmpty()) {
                mensagemVazia("Nenhum pescador foi encontrado.");
            }
        } catch (Exception e) {
            keepDialogOpen();
            mensagemAtencao("Não foi possível realizar a busca. Tente novamente mais tarde.");
            e.printStackTrace();
        }
    }

    /**
     * Instancia um novo pescador e anula as principais variáveis de navegação.
     */
    public void limpaPescador() {
        pescador = new Pescador();
        pescadoresBuscados = null;
        buscaNome = "";
    }

    /*
     * GETTERS AND SETTERS
     */
    public Pescador getPescador() {
        return pescador;
    }

    public void setPescador(Pescador pescador) {
        this.pescador = pescador;
    }

    public PescadorController getPescadorController() {
        if (pescadorController == null) {
            pescadorController = new PescadorController();
        }
        return pescadorController;
    }

    public String getBuscaNome() {
        return buscaNome;
    }

    public void setBuscaNome(String buscaNome) {
        this.buscaNome = buscaNome;
    }

    public List<Pescador> getPescadoresBuscados() {
        return pescadoresBuscados;
    }

    public void setPescadoresBuscados(List<Pescador> pescadoresBuscados) {
        this.pescadoresBuscados = pescadoresBuscados;
    }

}
